# 高级的 文件、文件夹、压缩包 处理模块
import shutil
# 拷贝文件内容,参数需要open
dst = open("b.txt", 'w', encoding='utf-8')
src = open("a.txt", 'r', encoding='utf-8')
shutil.copyfileobj(src, dst)
# 拷贝文件内容,直接传递文件名即可
shutil.copy("a.txt", "c.txt")
#  仅拷贝文件权限(linux下) -rwxr-xr-x   内容、组、用户均不变
shutil.copymode("a.txt", "c.txt")  # 文件必须存在
# 拷贝文件状态 包括：创建时间,最后修改时间等
shutil.copystat("a.txt", "c.txt")
# 拷贝文件内容和权限
shutil.copy("a.txt", "c.txt")
# 拷贝文件状态和内容
shutil.copy2("a.txt", "c.txt")
# 递归拷贝文件夹,目标目录不能存在，注意对folder2目录父级目录要有可写权限，ignore的意思是排除
shutil.copytree('father', 'newfather', ignore=shutil.ignore_patterns('*.py', 'tmp*'))
# 递归删除目录下的文件
# 如果ignore_errors=True，清除失败导致的错误将会被忽略；False，清除失败时调用onerrors指定的程序来处理
# 如果忽略这一参数设定，清除失败时将会弹出一个exception
# shutil.rmtree("newfather01", ignore_errors=False, onerror=None)
shutil.rmtree("newfather")
# 递归的去移动文件，它类似mv命令，其实就是重命名。
shutil.move('father', 'newfather')
